//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS FraudDetector service.
///
/// This is the Amazon Fraud Detector API Reference. This guide is for developers who need detailed information about Amazon Fraud Detector API actions, data types, and errors. For more information about Amazon Fraud Detector features, see the Amazon Fraud Detector User Guide. We provide the Query API as well as AWS software development kits (SDK) for Amazon Fraud Detector in Java and Python programming languages. The Amazon Fraud Detector Query API provides HTTPS requests that use the HTTP verb GET or POST and a Query parameter Action. AWS SDK provides libraries,  sample code, tutorials, and other resources for software developers who prefer to build applications using language-specific APIs instead of submitting a request over  HTTP or HTTPS. These libraries provide basic functions that automatically take care of tasks such as cryptographically signing your requests, retrying requests, and  handling error responses, so that it is easier for you to get started. For more information about the AWS SDKs, go to Tools to build on AWS page,  scroll down to the SDK section, and choose plus (+) sign to expand the section.
public struct FraudDetector: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the FraudDetector client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            amzTarget: "AWSHawksNestServiceFacade",
            serviceName: "FraudDetector",
            serviceIdentifier: "frauddetector",
            serviceProtocol: .json(version: "1.1"),
            apiVersion: "2019-11-15",
            endpoint: endpoint,
            errorType: FraudDetectorErrorType.self,
            xmlNamespace: "http://hawksnest.amazonaws.com/doc/2019-11-15",
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }





    // MARK: API Calls

    /// Creates a batch of variables.
    @Sendable
    @inlinable
    public func batchCreateVariable(_ input: BatchCreateVariableRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchCreateVariableResult {
        try await self.client.execute(
            operation: "BatchCreateVariable", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a batch of variables.
    ///
    /// Parameters:
    ///   - tags: A collection of key and value pairs.
    ///   - variableEntries: The list of variables for the batch create variable request.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchCreateVariable(
        tags: [Tag]? = nil,
        variableEntries: [VariableEntry],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchCreateVariableResult {
        let input = BatchCreateVariableRequest(
            tags: tags, 
            variableEntries: variableEntries
        )
        return try await self.batchCreateVariable(input, logger: logger)
    }

    /// Gets a batch of variables.
    @Sendable
    @inlinable
    public func batchGetVariable(_ input: BatchGetVariableRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchGetVariableResult {
        try await self.client.execute(
            operation: "BatchGetVariable", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a batch of variables.
    ///
    /// Parameters:
    ///   - names: The list of variable names to get.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchGetVariable(
        names: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchGetVariableResult {
        let input = BatchGetVariableRequest(
            names: names
        )
        return try await self.batchGetVariable(input, logger: logger)
    }

    ///  Cancels an in-progress batch import job.
    @Sendable
    @inlinable
    public func cancelBatchImportJob(_ input: CancelBatchImportJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CancelBatchImportJobResult {
        try await self.client.execute(
            operation: "CancelBatchImportJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Cancels an in-progress batch import job.
    ///
    /// Parameters:
    ///   - jobId:  The ID of an in-progress batch import job to cancel.  Amazon Fraud Detector will throw an error if the batch import job is in FAILED, CANCELED, or  COMPLETED state.
    ///   - logger: Logger use during operation
    @inlinable
    public func cancelBatchImportJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CancelBatchImportJobResult {
        let input = CancelBatchImportJobRequest(
            jobId: jobId
        )
        return try await self.cancelBatchImportJob(input, logger: logger)
    }

    /// Cancels the specified batch prediction job.
    @Sendable
    @inlinable
    public func cancelBatchPredictionJob(_ input: CancelBatchPredictionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CancelBatchPredictionJobResult {
        try await self.client.execute(
            operation: "CancelBatchPredictionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Cancels the specified batch prediction job.
    ///
    /// Parameters:
    ///   - jobId: The ID of the batch prediction job to cancel.
    ///   - logger: Logger use during operation
    @inlinable
    public func cancelBatchPredictionJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CancelBatchPredictionJobResult {
        let input = CancelBatchPredictionJobRequest(
            jobId: jobId
        )
        return try await self.cancelBatchPredictionJob(input, logger: logger)
    }

    /// Creates a batch import job.
    @Sendable
    @inlinable
    public func createBatchImportJob(_ input: CreateBatchImportJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateBatchImportJobResult {
        try await self.client.execute(
            operation: "CreateBatchImportJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a batch import job.
    ///
    /// Parameters:
    ///   - eventTypeName: The name of the event type.
    ///   - iamRoleArn: The ARN of the IAM role created for Amazon S3 bucket that holds your data file. The IAM role must have read permissions to your input S3 bucket and write permissions to your output S3 bucket. For more information about bucket permissions, see User policy examples in the  Amazon S3 User Guide.
    ///   - inputPath: The URI that points to the Amazon S3 location of your data file.
    ///   - jobId: The ID of the batch import job. The ID cannot be of a past job, unless the job exists in CREATE_FAILED state.
    ///   - outputPath: The URI that points to the Amazon S3 location for storing your results.
    ///   - tags: A collection of key-value pairs associated with this request.
    ///   - logger: Logger use during operation
    @inlinable
    public func createBatchImportJob(
        eventTypeName: String,
        iamRoleArn: String,
        inputPath: String,
        jobId: String,
        outputPath: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateBatchImportJobResult {
        let input = CreateBatchImportJobRequest(
            eventTypeName: eventTypeName, 
            iamRoleArn: iamRoleArn, 
            inputPath: inputPath, 
            jobId: jobId, 
            outputPath: outputPath, 
            tags: tags
        )
        return try await self.createBatchImportJob(input, logger: logger)
    }

    /// Creates a batch prediction job.
    @Sendable
    @inlinable
    public func createBatchPredictionJob(_ input: CreateBatchPredictionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateBatchPredictionJobResult {
        try await self.client.execute(
            operation: "CreateBatchPredictionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a batch prediction job.
    ///
    /// Parameters:
    ///   - detectorName: The name of the detector.
    ///   - detectorVersion: The detector version.
    ///   - eventTypeName: The name of the event type.
    ///   - iamRoleArn: The ARN of the IAM role to use for this job request. The IAM Role must have read permissions to your input S3 bucket and write permissions to your output S3 bucket. For more information about bucket permissions, see User policy examples in the  Amazon S3 User Guide.
    ///   - inputPath: The Amazon S3 location of your training file.
    ///   - jobId: The ID of the batch prediction job.
    ///   - outputPath: The Amazon S3 location of your output file.
    ///   - tags: A collection of key and value pairs.
    ///   - logger: Logger use during operation
    @inlinable
    public func createBatchPredictionJob(
        detectorName: String,
        detectorVersion: String? = nil,
        eventTypeName: String,
        iamRoleArn: String,
        inputPath: String,
        jobId: String,
        outputPath: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateBatchPredictionJobResult {
        let input = CreateBatchPredictionJobRequest(
            detectorName: detectorName, 
            detectorVersion: detectorVersion, 
            eventTypeName: eventTypeName, 
            iamRoleArn: iamRoleArn, 
            inputPath: inputPath, 
            jobId: jobId, 
            outputPath: outputPath, 
            tags: tags
        )
        return try await self.createBatchPredictionJob(input, logger: logger)
    }

    /// Creates a detector version. The detector version starts in a DRAFT status.
    @Sendable
    @inlinable
    public func createDetectorVersion(_ input: CreateDetectorVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDetectorVersionResult {
        try await self.client.execute(
            operation: "CreateDetectorVersion", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a detector version. The detector version starts in a DRAFT status.
    ///
    /// Parameters:
    ///   - description: The description of the detector version.
    ///   - detectorId: The ID of the detector under which you want to create a new version.
    ///   - externalModelEndpoints: The Amazon Sagemaker model endpoints to include in the detector version.
    ///   - modelVersions: The model versions to include in the detector version.
    ///   - ruleExecutionMode: The rule execution mode for the rules included in the detector version. You can define and edit the rule mode at the detector version level, when it is in draft status. If you specify FIRST_MATCHED, Amazon Fraud Detector evaluates rules sequentially, first to last, stopping at the first matched rule. Amazon Fraud dectector then provides the outcomes for that single rule. If you specifiy ALL_MATCHED, Amazon Fraud Detector evaluates all rules and returns the outcomes for all matched rules.  The default behavior is FIRST_MATCHED.
    ///   - rules: The rules to include in the detector version.
    ///   - tags: A collection of key and value pairs.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDetectorVersion(
        description: String? = nil,
        detectorId: String,
        externalModelEndpoints: [String]? = nil,
        modelVersions: [ModelVersion]? = nil,
        ruleExecutionMode: RuleExecutionMode? = nil,
        rules: [Rule],
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDetectorVersionResult {
        let input = CreateDetectorVersionRequest(
            description: description, 
            detectorId: detectorId, 
            externalModelEndpoints: externalModelEndpoints, 
            modelVersions: modelVersions, 
            ruleExecutionMode: ruleExecutionMode, 
            rules: rules, 
            tags: tags
        )
        return try await self.createDetectorVersion(input, logger: logger)
    }

    ///  Creates a list.   List is a set of input data for a variable in your event dataset. You use the input data in a rule that's associated with your detector.  For more information, see Lists.
    @Sendable
    @inlinable
    public func createList(_ input: CreateListRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateListResult {
        try await self.client.execute(
            operation: "CreateList", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Creates a list.   List is a set of input data for a variable in your event dataset. You use the input data in a rule that's associated with your detector.  For more information, see Lists.
    ///
    /// Parameters:
    ///   - description:  The description of the list.
    ///   - elements:  The names of the elements, if providing.  You can also create an empty list and add elements later using the UpdateList API.
    ///   - name:  The name of the list.
    ///   - tags:  A collection of the key and value pairs.
    ///   - variableType:  The variable type of the list. You can only assign the variable type with String data type.  For more information, see  Variable types.
    ///   - logger: Logger use during operation
    @inlinable
    public func createList(
        description: String? = nil,
        elements: [String]? = nil,
        name: String,
        tags: [Tag]? = nil,
        variableType: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateListResult {
        let input = CreateListRequest(
            description: description, 
            elements: elements, 
            name: name, 
            tags: tags, 
            variableType: variableType
        )
        return try await self.createList(input, logger: logger)
    }

    /// Creates a model using the specified model type.
    @Sendable
    @inlinable
    public func createModel(_ input: CreateModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateModelResult {
        try await self.client.execute(
            operation: "CreateModel", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a model using the specified model type.
    ///
    /// Parameters:
    ///   - description: The model description.
    ///   - eventTypeName: The name of the event type.
    ///   - modelId: The model ID.
    ///   - modelType: The model type.
    ///   - tags: A collection of key and value pairs.
    ///   - logger: Logger use during operation
    @inlinable
    public func createModel(
        description: String? = nil,
        eventTypeName: String,
        modelId: String,
        modelType: ModelTypeEnum,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateModelResult {
        let input = CreateModelRequest(
            description: description, 
            eventTypeName: eventTypeName, 
            modelId: modelId, 
            modelType: modelType, 
            tags: tags
        )
        return try await self.createModel(input, logger: logger)
    }

    /// Creates a version of the model using the specified model type and model id.
    @Sendable
    @inlinable
    public func createModelVersion(_ input: CreateModelVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateModelVersionResult {
        try await self.client.execute(
            operation: "CreateModelVersion", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a version of the model using the specified model type and model id.
    ///
    /// Parameters:
    ///   - externalEventsDetail: Details of the external events data used for model version training. Required if trainingDataSource is EXTERNAL_EVENTS.
    ///   - ingestedEventsDetail: Details of the ingested events data used for model version training. Required if trainingDataSource is INGESTED_EVENTS.
    ///   - modelId: The model ID.
    ///   - modelType: The model type.
    ///   - tags: A collection of key and value pairs.
    ///   - trainingDataSchema: The training data schema.
    ///   - trainingDataSource: The training data source location in Amazon S3.
    ///   - logger: Logger use during operation
    @inlinable
    public func createModelVersion(
        externalEventsDetail: ExternalEventsDetail? = nil,
        ingestedEventsDetail: IngestedEventsDetail? = nil,
        modelId: String,
        modelType: ModelTypeEnum,
        tags: [Tag]? = nil,
        trainingDataSchema: TrainingDataSchema,
        trainingDataSource: TrainingDataSourceEnum,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateModelVersionResult {
        let input = CreateModelVersionRequest(
            externalEventsDetail: externalEventsDetail, 
            ingestedEventsDetail: ingestedEventsDetail, 
            modelId: modelId, 
            modelType: modelType, 
            tags: tags, 
            trainingDataSchema: trainingDataSchema, 
            trainingDataSource: trainingDataSource
        )
        return try await self.createModelVersion(input, logger: logger)
    }

    /// Creates a rule for use with the specified detector.
    @Sendable
    @inlinable
    public func createRule(_ input: CreateRuleRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateRuleResult {
        try await self.client.execute(
            operation: "CreateRule", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a rule for use with the specified detector.
    ///
    /// Parameters:
    ///   - description: The rule description.
    ///   - detectorId: The detector ID for the rule's parent detector.
    ///   - expression: The rule expression.
    ///   - language: The language of the rule.
    ///   - outcomes: The outcome or outcomes returned when the rule expression matches.
    ///   - ruleId: The rule ID.
    ///   - tags: A collection of key and value pairs.
    ///   - logger: Logger use during operation
    @inlinable
    public func createRule(
        description: String? = nil,
        detectorId: String,
        expression: String,
        language: Language,
        outcomes: [String],
        ruleId: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateRuleResult {
        let input = CreateRuleRequest(
            description: description, 
            detectorId: detectorId, 
            expression: expression, 
            language: language, 
            outcomes: outcomes, 
            ruleId: ruleId, 
            tags: tags
        )
        return try await self.createRule(input, logger: logger)
    }

    /// Creates a variable.
    @Sendable
    @inlinable
    public func createVariable(_ input: CreateVariableRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateVariableResult {
        try await self.client.execute(
            operation: "CreateVariable", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a variable.
    ///
    /// Parameters:
    ///   - dataSource: The source of the data.
    ///   - dataType: The data type of the variable.
    ///   - defaultValue: The default value for the variable when no value is received.
    ///   - description: The description.
    ///   - name: The name of the variable.
    ///   - tags: A collection of key and value pairs.
    ///   - variableType: The variable type. For more information see Variable types.
    ///   - logger: Logger use during operation
    @inlinable
    public func createVariable(
        dataSource: DataSource,
        dataType: DataType,
        defaultValue: String,
        description: String? = nil,
        name: String,
        tags: [Tag]? = nil,
        variableType: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateVariableResult {
        let input = CreateVariableRequest(
            dataSource: dataSource, 
            dataType: dataType, 
            defaultValue: defaultValue, 
            description: description, 
            name: name, 
            tags: tags, 
            variableType: variableType
        )
        return try await self.createVariable(input, logger: logger)
    }

    /// Deletes the specified batch import job ID record. This action does not delete the data that was batch imported.
    @Sendable
    @inlinable
    public func deleteBatchImportJob(_ input: DeleteBatchImportJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteBatchImportJobResult {
        try await self.client.execute(
            operation: "DeleteBatchImportJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified batch import job ID record. This action does not delete the data that was batch imported.
    ///
    /// Parameters:
    ///   - jobId: The ID of the batch import job to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteBatchImportJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteBatchImportJobResult {
        let input = DeleteBatchImportJobRequest(
            jobId: jobId
        )
        return try await self.deleteBatchImportJob(input, logger: logger)
    }

    /// Deletes a batch prediction job.
    @Sendable
    @inlinable
    public func deleteBatchPredictionJob(_ input: DeleteBatchPredictionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteBatchPredictionJobResult {
        try await self.client.execute(
            operation: "DeleteBatchPredictionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a batch prediction job.
    ///
    /// Parameters:
    ///   - jobId: The ID of the batch prediction job to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteBatchPredictionJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteBatchPredictionJobResult {
        let input = DeleteBatchPredictionJobRequest(
            jobId: jobId
        )
        return try await self.deleteBatchPredictionJob(input, logger: logger)
    }

    /// Deletes the detector. Before deleting a detector, you must first delete all detector versions and rule versions associated with the detector. When you delete a detector, Amazon Fraud Detector permanently deletes the detector and the data is no longer stored in Amazon Fraud Detector.
    @Sendable
    @inlinable
    public func deleteDetector(_ input: DeleteDetectorRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteDetectorResult {
        try await self.client.execute(
            operation: "DeleteDetector", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the detector. Before deleting a detector, you must first delete all detector versions and rule versions associated with the detector. When you delete a detector, Amazon Fraud Detector permanently deletes the detector and the data is no longer stored in Amazon Fraud Detector.
    ///
    /// Parameters:
    ///   - detectorId: The ID of the detector to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDetector(
        detectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteDetectorResult {
        let input = DeleteDetectorRequest(
            detectorId: detectorId
        )
        return try await self.deleteDetector(input, logger: logger)
    }

    /// Deletes the detector version. You cannot delete detector versions that are in ACTIVE status. When you delete a detector version, Amazon Fraud Detector permanently deletes the detector and the data is no longer stored in Amazon Fraud Detector.
    @Sendable
    @inlinable
    public func deleteDetectorVersion(_ input: DeleteDetectorVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteDetectorVersionResult {
        try await self.client.execute(
            operation: "DeleteDetectorVersion", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the detector version. You cannot delete detector versions that are in ACTIVE status. When you delete a detector version, Amazon Fraud Detector permanently deletes the detector and the data is no longer stored in Amazon Fraud Detector.
    ///
    /// Parameters:
    ///   - detectorId: The ID of the parent detector for the detector version to delete.
    ///   - detectorVersionId: The ID of the detector version to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDetectorVersion(
        detectorId: String,
        detectorVersionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteDetectorVersionResult {
        let input = DeleteDetectorVersionRequest(
            detectorId: detectorId, 
            detectorVersionId: detectorVersionId
        )
        return try await self.deleteDetectorVersion(input, logger: logger)
    }

    /// Deletes an entity type. You cannot delete an entity type that is included in an event type. When you delete an entity type, Amazon Fraud Detector permanently deletes that entity type and the data is no longer stored in Amazon Fraud Detector.
    @Sendable
    @inlinable
    public func deleteEntityType(_ input: DeleteEntityTypeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteEntityTypeResult {
        try await self.client.execute(
            operation: "DeleteEntityType", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an entity type. You cannot delete an entity type that is included in an event type. When you delete an entity type, Amazon Fraud Detector permanently deletes that entity type and the data is no longer stored in Amazon Fraud Detector.
    ///
    /// Parameters:
    ///   - name: The name of the entity type to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteEntityType(
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteEntityTypeResult {
        let input = DeleteEntityTypeRequest(
            name: name
        )
        return try await self.deleteEntityType(input, logger: logger)
    }

    /// Deletes the specified event. When you delete an event, Amazon Fraud Detector permanently deletes that event and the event data is no longer stored in Amazon Fraud Detector.
    /// 	  If deleteAuditHistory is True, event data is available through search for up to 30 seconds after the delete operation is completed.
    @Sendable
    @inlinable
    public func deleteEvent(_ input: DeleteEventRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteEventResult {
        try await self.client.execute(
            operation: "DeleteEvent", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified event. When you delete an event, Amazon Fraud Detector permanently deletes that event and the event data is no longer stored in Amazon Fraud Detector.
    /// 	  If deleteAuditHistory is True, event data is available through search for up to 30 seconds after the delete operation is completed.
    ///
    /// Parameters:
    ///   - deleteAuditHistory: Specifies whether or not to delete any predictions associated with the event. If set to True,
    ///   - eventId: The ID of the event to delete.
    ///   - eventTypeName: The name of the event type.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteEvent(
        deleteAuditHistory: Bool? = nil,
        eventId: String,
        eventTypeName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteEventResult {
        let input = DeleteEventRequest(
            deleteAuditHistory: deleteAuditHistory, 
            eventId: eventId, 
            eventTypeName: eventTypeName
        )
        return try await self.deleteEvent(input, logger: logger)
    }

    /// Deletes an event type. You cannot delete an event type that is used in a detector or a model. When you delete an event type, Amazon Fraud Detector permanently deletes that event type and the data is no longer stored in Amazon Fraud Detector.
    @Sendable
    @inlinable
    public func deleteEventType(_ input: DeleteEventTypeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteEventTypeResult {
        try await self.client.execute(
            operation: "DeleteEventType", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an event type. You cannot delete an event type that is used in a detector or a model. When you delete an event type, Amazon Fraud Detector permanently deletes that event type and the data is no longer stored in Amazon Fraud Detector.
    ///
    /// Parameters:
    ///   - name: The name of the event type to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteEventType(
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteEventTypeResult {
        let input = DeleteEventTypeRequest(
            name: name
        )
        return try await self.deleteEventType(input, logger: logger)
    }

    /// Deletes all events of a particular event type.
    @Sendable
    @inlinable
    public func deleteEventsByEventType(_ input: DeleteEventsByEventTypeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteEventsByEventTypeResult {
        try await self.client.execute(
            operation: "DeleteEventsByEventType", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes all events of a particular event type.
    ///
    /// Parameters:
    ///   - eventTypeName: The name of the event type.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteEventsByEventType(
        eventTypeName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteEventsByEventTypeResult {
        let input = DeleteEventsByEventTypeRequest(
            eventTypeName: eventTypeName
        )
        return try await self.deleteEventsByEventType(input, logger: logger)
    }

    /// Removes a SageMaker model from Amazon Fraud Detector. You can remove an Amazon SageMaker model if it is not associated with a detector version. Removing a SageMaker model disconnects it from Amazon Fraud Detector, but the model remains available in SageMaker.
    @Sendable
    @inlinable
    public func deleteExternalModel(_ input: DeleteExternalModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteExternalModelResult {
        try await self.client.execute(
            operation: "DeleteExternalModel", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes a SageMaker model from Amazon Fraud Detector. You can remove an Amazon SageMaker model if it is not associated with a detector version. Removing a SageMaker model disconnects it from Amazon Fraud Detector, but the model remains available in SageMaker.
    ///
    /// Parameters:
    ///   - modelEndpoint: The endpoint of the Amazon Sagemaker model to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteExternalModel(
        modelEndpoint: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteExternalModelResult {
        let input = DeleteExternalModelRequest(
            modelEndpoint: modelEndpoint
        )
        return try await self.deleteExternalModel(input, logger: logger)
    }

    /// Deletes a label. You cannot delete labels that are included in an event type in Amazon Fraud Detector. You cannot delete a label assigned to an event ID. You must first delete the relevant event ID. When you delete a label, Amazon Fraud Detector permanently deletes that label and the data is no longer stored in Amazon Fraud Detector.
    @Sendable
    @inlinable
    public func deleteLabel(_ input: DeleteLabelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteLabelResult {
        try await self.client.execute(
            operation: "DeleteLabel", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a label. You cannot delete labels that are included in an event type in Amazon Fraud Detector. You cannot delete a label assigned to an event ID. You must first delete the relevant event ID. When you delete a label, Amazon Fraud Detector permanently deletes that label and the data is no longer stored in Amazon Fraud Detector.
    ///
    /// Parameters:
    ///   - name: The name of the label to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteLabel(
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteLabelResult {
        let input = DeleteLabelRequest(
            name: name
        )
        return try await self.deleteLabel(input, logger: logger)
    }

    ///  Deletes the list, provided it is not used in a rule.  When you delete a list, Amazon Fraud Detector permanently deletes that list and the elements in the list.
    @Sendable
    @inlinable
    public func deleteList(_ input: DeleteListRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteListResult {
        try await self.client.execute(
            operation: "DeleteList", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Deletes the list, provided it is not used in a rule.  When you delete a list, Amazon Fraud Detector permanently deletes that list and the elements in the list.
    ///
    /// Parameters:
    ///   - name:  The name of the list to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteList(
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteListResult {
        let input = DeleteListRequest(
            name: name
        )
        return try await self.deleteList(input, logger: logger)
    }

    /// Deletes a model. You can delete models and model versions in Amazon Fraud Detector, provided that they are not associated with a detector version. When you delete a model, Amazon Fraud Detector permanently deletes that model and the data is no longer stored in Amazon Fraud Detector.
    @Sendable
    @inlinable
    public func deleteModel(_ input: DeleteModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteModelResult {
        try await self.client.execute(
            operation: "DeleteModel", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a model. You can delete models and model versions in Amazon Fraud Detector, provided that they are not associated with a detector version. When you delete a model, Amazon Fraud Detector permanently deletes that model and the data is no longer stored in Amazon Fraud Detector.
    ///
    /// Parameters:
    ///   - modelId: The model ID of the model to delete.
    ///   - modelType: The model type of the model to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteModel(
        modelId: String,
        modelType: ModelTypeEnum,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteModelResult {
        let input = DeleteModelRequest(
            modelId: modelId, 
            modelType: modelType
        )
        return try await self.deleteModel(input, logger: logger)
    }

    /// Deletes a model version. You can delete models and model versions in Amazon Fraud Detector, provided that they are not associated with a detector version. When you delete a model version, Amazon Fraud Detector permanently deletes that model version and the data is no longer stored in Amazon Fraud Detector.
    @Sendable
    @inlinable
    public func deleteModelVersion(_ input: DeleteModelVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteModelVersionResult {
        try await self.client.execute(
            operation: "DeleteModelVersion", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a model version. You can delete models and model versions in Amazon Fraud Detector, provided that they are not associated with a detector version. When you delete a model version, Amazon Fraud Detector permanently deletes that model version and the data is no longer stored in Amazon Fraud Detector.
    ///
    /// Parameters:
    ///   - modelId: The model ID of the model version to delete.
    ///   - modelType: The model type of the model version to delete.
    ///   - modelVersionNumber: The model version number of the model version to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteModelVersion(
        modelId: String,
        modelType: ModelTypeEnum,
        modelVersionNumber: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteModelVersionResult {
        let input = DeleteModelVersionRequest(
            modelId: modelId, 
            modelType: modelType, 
            modelVersionNumber: modelVersionNumber
        )
        return try await self.deleteModelVersion(input, logger: logger)
    }

    /// Deletes an outcome. You cannot delete an outcome that is used in a rule version. When you delete an outcome, Amazon Fraud Detector permanently deletes that outcome and the data is no longer stored in Amazon Fraud Detector.
    @Sendable
    @inlinable
    public func deleteOutcome(_ input: DeleteOutcomeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteOutcomeResult {
        try await self.client.execute(
            operation: "DeleteOutcome", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an outcome. You cannot delete an outcome that is used in a rule version. When you delete an outcome, Amazon Fraud Detector permanently deletes that outcome and the data is no longer stored in Amazon Fraud Detector.
    ///
    /// Parameters:
    ///   - name: The name of the outcome to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteOutcome(
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteOutcomeResult {
        let input = DeleteOutcomeRequest(
            name: name
        )
        return try await self.deleteOutcome(input, logger: logger)
    }

    /// Deletes the rule. You cannot delete a rule if it is used by an ACTIVE or INACTIVE detector version. When you delete a rule, Amazon Fraud Detector permanently deletes that rule and the data is no longer stored in Amazon Fraud Detector.
    @Sendable
    @inlinable
    public func deleteRule(_ input: DeleteRuleRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteRuleResult {
        try await self.client.execute(
            operation: "DeleteRule", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the rule. You cannot delete a rule if it is used by an ACTIVE or INACTIVE detector version. When you delete a rule, Amazon Fraud Detector permanently deletes that rule and the data is no longer stored in Amazon Fraud Detector.
    ///
    /// Parameters:
    ///   - rule: 
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteRule(
        rule: Rule,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteRuleResult {
        let input = DeleteRuleRequest(
            rule: rule
        )
        return try await self.deleteRule(input, logger: logger)
    }

    /// Deletes a variable. You can't delete variables that are included in an event type in Amazon Fraud Detector. Amazon Fraud Detector automatically deletes model output variables and SageMaker model output variables when you delete the model. You can't delete these variables manually. When you delete a variable, Amazon Fraud Detector permanently deletes that variable and the data is no longer stored in Amazon Fraud Detector.
    @Sendable
    @inlinable
    public func deleteVariable(_ input: DeleteVariableRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteVariableResult {
        try await self.client.execute(
            operation: "DeleteVariable", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a variable. You can't delete variables that are included in an event type in Amazon Fraud Detector. Amazon Fraud Detector automatically deletes model output variables and SageMaker model output variables when you delete the model. You can't delete these variables manually. When you delete a variable, Amazon Fraud Detector permanently deletes that variable and the data is no longer stored in Amazon Fraud Detector.
    ///
    /// Parameters:
    ///   - name: The name of the variable to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteVariable(
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteVariableResult {
        let input = DeleteVariableRequest(
            name: name
        )
        return try await self.deleteVariable(input, logger: logger)
    }

    /// Gets all versions for a specified detector.
    @Sendable
    @inlinable
    public func describeDetector(_ input: DescribeDetectorRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDetectorResult {
        try await self.client.execute(
            operation: "DescribeDetector", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets all versions for a specified detector.
    ///
    /// Parameters:
    ///   - detectorId: The detector ID.
    ///   - maxResults: The maximum number of results to return for the request.
    ///   - nextToken: The next token from the previous response.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDetector(
        detectorId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDetectorResult {
        let input = DescribeDetectorRequest(
            detectorId: detectorId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeDetector(input, logger: logger)
    }

    /// Gets all of the model versions for the specified model type or for the specified model type and model ID. You can also get details for a single, specified model version.
    @Sendable
    @inlinable
    public func describeModelVersions(_ input: DescribeModelVersionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeModelVersionsResult {
        try await self.client.execute(
            operation: "DescribeModelVersions", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets all of the model versions for the specified model type or for the specified model type and model ID. You can also get details for a single, specified model version.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return.
    ///   - modelId: The model ID.
    ///   - modelType: The model type.
    ///   - modelVersionNumber: The model version number.
    ///   - nextToken: The next token from the previous results.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeModelVersions(
        maxResults: Int? = nil,
        modelId: String? = nil,
        modelType: ModelTypeEnum? = nil,
        modelVersionNumber: String? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeModelVersionsResult {
        let input = DescribeModelVersionsRequest(
            maxResults: maxResults, 
            modelId: modelId, 
            modelType: modelType, 
            modelVersionNumber: modelVersionNumber, 
            nextToken: nextToken
        )
        return try await self.describeModelVersions(input, logger: logger)
    }

    /// Gets all batch import jobs or a specific job of the specified ID. This is a paginated API. If you provide a null maxResults,  this action retrieves a maximum of 50 records per page. If you provide a maxResults, the value must be between 1 and 50.  To get the next page results, provide the pagination token from the GetBatchImportJobsResponse as part of your request.  A null pagination token fetches the records from the beginning.
    @Sendable
    @inlinable
    public func getBatchImportJobs(_ input: GetBatchImportJobsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetBatchImportJobsResult {
        try await self.client.execute(
            operation: "GetBatchImportJobs", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets all batch import jobs or a specific job of the specified ID. This is a paginated API. If you provide a null maxResults,  this action retrieves a maximum of 50 records per page. If you provide a maxResults, the value must be between 1 and 50.  To get the next page results, provide the pagination token from the GetBatchImportJobsResponse as part of your request.  A null pagination token fetches the records from the beginning.
    ///
    /// Parameters:
    ///   - jobId: The ID of the batch import job to get.
    ///   - maxResults: The maximum number of objects to return for request.
    ///   - nextToken: The next token from the previous request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getBatchImportJobs(
        jobId: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetBatchImportJobsResult {
        let input = GetBatchImportJobsRequest(
            jobId: jobId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.getBatchImportJobs(input, logger: logger)
    }

    /// Gets all batch prediction jobs or a specific job if you specify a job ID. This is a paginated API. If you provide a null maxResults, this action retrieves a maximum of 50 records per page. If you provide a maxResults, the value must be between 1 and 50. To get the next page results, provide the pagination token from the GetBatchPredictionJobsResponse as part of your request. A null pagination token fetches the records from the beginning.
    @Sendable
    @inlinable
    public func getBatchPredictionJobs(_ input: GetBatchPredictionJobsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetBatchPredictionJobsResult {
        try await self.client.execute(
            operation: "GetBatchPredictionJobs", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets all batch prediction jobs or a specific job if you specify a job ID. This is a paginated API. If you provide a null maxResults, this action retrieves a maximum of 50 records per page. If you provide a maxResults, the value must be between 1 and 50. To get the next page results, provide the pagination token from the GetBatchPredictionJobsResponse as part of your request. A null pagination token fetches the records from the beginning.
    ///
    /// Parameters:
    ///   - jobId: The batch prediction job for which to get the details.
    ///   - maxResults: The maximum number of objects to return for the request.
    ///   - nextToken: The next token from the previous request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getBatchPredictionJobs(
        jobId: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetBatchPredictionJobsResult {
        let input = GetBatchPredictionJobsRequest(
            jobId: jobId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.getBatchPredictionJobs(input, logger: logger)
    }

    /// Retrieves the status of a DeleteEventsByEventType action.
    @Sendable
    @inlinable
    public func getDeleteEventsByEventTypeStatus(_ input: GetDeleteEventsByEventTypeStatusRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDeleteEventsByEventTypeStatusResult {
        try await self.client.execute(
            operation: "GetDeleteEventsByEventTypeStatus", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the status of a DeleteEventsByEventType action.
    ///
    /// Parameters:
    ///   - eventTypeName: Name of event type for which to get the deletion status.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDeleteEventsByEventTypeStatus(
        eventTypeName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDeleteEventsByEventTypeStatusResult {
        let input = GetDeleteEventsByEventTypeStatusRequest(
            eventTypeName: eventTypeName
        )
        return try await self.getDeleteEventsByEventTypeStatus(input, logger: logger)
    }

    /// Gets a particular detector version.
    @Sendable
    @inlinable
    public func getDetectorVersion(_ input: GetDetectorVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDetectorVersionResult {
        try await self.client.execute(
            operation: "GetDetectorVersion", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a particular detector version.
    ///
    /// Parameters:
    ///   - detectorId: The detector ID.
    ///   - detectorVersionId: The detector version ID.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDetectorVersion(
        detectorId: String,
        detectorVersionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDetectorVersionResult {
        let input = GetDetectorVersionRequest(
            detectorId: detectorId, 
            detectorVersionId: detectorVersionId
        )
        return try await self.getDetectorVersion(input, logger: logger)
    }

    /// Gets all detectors or a single detector if a detectorId is specified. This is a paginated API. If you provide a null maxResults, this action retrieves a maximum of 10 records per page. If you provide a maxResults, the value must be between 5 and 10. To get the next page results, provide the pagination token from the GetDetectorsResponse as part of your request. A null pagination token fetches the records from the beginning.
    @Sendable
    @inlinable
    public func getDetectors(_ input: GetDetectorsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDetectorsResult {
        try await self.client.execute(
            operation: "GetDetectors", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets all detectors or a single detector if a detectorId is specified. This is a paginated API. If you provide a null maxResults, this action retrieves a maximum of 10 records per page. If you provide a maxResults, the value must be between 5 and 10. To get the next page results, provide the pagination token from the GetDetectorsResponse as part of your request. A null pagination token fetches the records from the beginning.
    ///
    /// Parameters:
    ///   - detectorId: The detector ID.
    ///   - maxResults: The maximum number of objects to return for the request.
    ///   - nextToken: The next token for the subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDetectors(
        detectorId: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDetectorsResult {
        let input = GetDetectorsRequest(
            detectorId: detectorId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.getDetectors(input, logger: logger)
    }

    /// Gets all entity types or a specific entity type if a name is specified. This is a paginated API. If you provide a null maxResults, this action retrieves a maximum of 10 records per page. If you provide a maxResults, the value must be between 5 and 10. To get the next page results, provide the pagination token from the GetEntityTypesResponse as part of your request. A null pagination token fetches the records from the beginning.
    @Sendable
    @inlinable
    public func getEntityTypes(_ input: GetEntityTypesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetEntityTypesResult {
        try await self.client.execute(
            operation: "GetEntityTypes", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets all entity types or a specific entity type if a name is specified. This is a paginated API. If you provide a null maxResults, this action retrieves a maximum of 10 records per page. If you provide a maxResults, the value must be between 5 and 10. To get the next page results, provide the pagination token from the GetEntityTypesResponse as part of your request. A null pagination token fetches the records from the beginning.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of objects to return for the request.
    ///   - name: The name.
    ///   - nextToken: The next token for the subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getEntityTypes(
        maxResults: Int? = nil,
        name: String? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetEntityTypesResult {
        let input = GetEntityTypesRequest(
            maxResults: maxResults, 
            name: name, 
            nextToken: nextToken
        )
        return try await self.getEntityTypes(input, logger: logger)
    }

    /// Retrieves details of events stored with Amazon Fraud Detector. This action does not retrieve prediction results.
    @Sendable
    @inlinable
    public func getEvent(_ input: GetEventRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetEventResult {
        try await self.client.execute(
            operation: "GetEvent", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves details of events stored with Amazon Fraud Detector. This action does not retrieve prediction results.
    ///
    /// Parameters:
    ///   - eventId: The ID of the event to retrieve.
    ///   - eventTypeName: The event type of the event to retrieve.
    ///   - logger: Logger use during operation
    @inlinable
    public func getEvent(
        eventId: String,
        eventTypeName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetEventResult {
        let input = GetEventRequest(
            eventId: eventId, 
            eventTypeName: eventTypeName
        )
        return try await self.getEvent(input, logger: logger)
    }

    /// Evaluates an event against a detector version. If a version ID is not provided, the detector’s (ACTIVE) version is used.
    @Sendable
    @inlinable
    public func getEventPrediction(_ input: GetEventPredictionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetEventPredictionResult {
        try await self.client.execute(
            operation: "GetEventPrediction", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Evaluates an event against a detector version. If a version ID is not provided, the detector’s (ACTIVE) version is used.
    ///
    /// Parameters:
    ///   - detectorId: The detector ID.
    ///   - detectorVersionId: The detector version ID.
    ///   - entities: The entity type (associated with the detector's event type) and specific entity ID representing who performed the event. If an entity id is not available, use "UNKNOWN."
    ///   - eventId: The unique ID used to identify the event.
    ///   - eventTimestamp: Timestamp that defines when the event under evaluation occurred. The timestamp must be specified using ISO 8601 standard in UTC.
    ///   - eventTypeName: The event type associated with the detector specified for the prediction.
    ///   - eventVariables: Names of the event type's variables you defined in Amazon Fraud Detector to represent data elements and  their corresponding values for the event you are sending for evaluation.  You must provide at least one eventVariable  To ensure most accurate fraud prediction and to simplify your data preparation, Amazon Fraud Detector will replace all missing variables or values as follows:  For Amazon Fraud Detector trained models:  If a null value is provided explicitly for a variable or if a variable is missing, model will replace the null value or the missing variable (no variable name in the eventVariables map)  with calculated default mean/medians for numeric variables and with special values for categorical variables.  For imported SageMaker models:  If a null value is provided explicitly for a variable, the model and rules will use “null” as the value. If a variable is not provided (no variable name in the eventVariables map), model and rules  will use the default value that is provided for the variable.
    ///   - externalModelEndpointDataBlobs: The Amazon SageMaker model endpoint input data blobs.
    ///   - logger: Logger use during operation
    @inlinable
    public func getEventPrediction(
        detectorId: String,
        detectorVersionId: String? = nil,
        entities: [Entity],
        eventId: String,
        eventTimestamp: String,
        eventTypeName: String,
        eventVariables: [String: String],
        externalModelEndpointDataBlobs: [String: ModelEndpointDataBlob]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetEventPredictionResult {
        let input = GetEventPredictionRequest(
            detectorId: detectorId, 
            detectorVersionId: detectorVersionId, 
            entities: entities, 
            eventId: eventId, 
            eventTimestamp: eventTimestamp, 
            eventTypeName: eventTypeName, 
            eventVariables: eventVariables, 
            externalModelEndpointDataBlobs: externalModelEndpointDataBlobs
        )
        return try await self.getEventPrediction(input, logger: logger)
    }

    /// Gets details of the past fraud predictions for the specified event ID, event type, detector ID, and detector version ID that was generated in the specified time period.
    @Sendable
    @inlinable
    public func getEventPredictionMetadata(_ input: GetEventPredictionMetadataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetEventPredictionMetadataResult {
        try await self.client.execute(
            operation: "GetEventPredictionMetadata", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets details of the past fraud predictions for the specified event ID, event type, detector ID, and detector version ID that was generated in the specified time period.
    ///
    /// Parameters:
    ///   - detectorId: The detector ID.
    ///   - detectorVersionId: The detector version ID.
    ///   - eventId: The event ID.
    ///   - eventTypeName: The event type associated with the detector specified for the prediction.
    ///   - predictionTimestamp:  The timestamp that defines when the prediction was generated. The timestamp must be specified using ISO 8601 standard in UTC. We recommend calling ListEventPredictions first, and using the predictionTimestamp value in the response to provide an accurate prediction timestamp value.
    ///   - logger: Logger use during operation
    @inlinable
    public func getEventPredictionMetadata(
        detectorId: String,
        detectorVersionId: String,
        eventId: String,
        eventTypeName: String,
        predictionTimestamp: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetEventPredictionMetadataResult {
        let input = GetEventPredictionMetadataRequest(
            detectorId: detectorId, 
            detectorVersionId: detectorVersionId, 
            eventId: eventId, 
            eventTypeName: eventTypeName, 
            predictionTimestamp: predictionTimestamp
        )
        return try await self.getEventPredictionMetadata(input, logger: logger)
    }

    /// Gets all event types or a specific event type if name is provided. This is a paginated API. If you provide a null maxResults, this action retrieves a maximum of 10 records per page. If you provide a maxResults, the value must be between 5 and 10. To get the next page results, provide the pagination token from the GetEventTypesResponse as part of your request. A null pagination token fetches the records from the beginning.
    @Sendable
    @inlinable
    public func getEventTypes(_ input: GetEventTypesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetEventTypesResult {
        try await self.client.execute(
            operation: "GetEventTypes", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets all event types or a specific event type if name is provided. This is a paginated API. If you provide a null maxResults, this action retrieves a maximum of 10 records per page. If you provide a maxResults, the value must be between 5 and 10. To get the next page results, provide the pagination token from the GetEventTypesResponse as part of your request. A null pagination token fetches the records from the beginning.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of objects to return for the request.
    ///   - name: The name.
    ///   - nextToken: The next token for the subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getEventTypes(
        maxResults: Int? = nil,
        name: String? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetEventTypesResult {
        let input = GetEventTypesRequest(
            maxResults: maxResults, 
            name: name, 
            nextToken: nextToken
        )
        return try await self.getEventTypes(input, logger: logger)
    }

    /// Gets the details for one or more Amazon SageMaker models that have been imported into the service. This is a paginated API. If you provide a null maxResults, this actions retrieves a maximum of 10 records per page. If you provide a maxResults, the value must be between 5 and 10. To get the next page results, provide the pagination token from the GetExternalModelsResult as part of your request. A null pagination token fetches the records from the beginning.
    @Sendable
    @inlinable
    public func getExternalModels(_ input: GetExternalModelsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetExternalModelsResult {
        try await self.client.execute(
            operation: "GetExternalModels", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the details for one or more Amazon SageMaker models that have been imported into the service. This is a paginated API. If you provide a null maxResults, this actions retrieves a maximum of 10 records per page. If you provide a maxResults, the value must be between 5 and 10. To get the next page results, provide the pagination token from the GetExternalModelsResult as part of your request. A null pagination token fetches the records from the beginning.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of objects to return for the request.
    ///   - modelEndpoint: The Amazon SageMaker model endpoint.
    ///   - nextToken: The next page token for the request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getExternalModels(
        maxResults: Int? = nil,
        modelEndpoint: String? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetExternalModelsResult {
        let input = GetExternalModelsRequest(
            maxResults: maxResults, 
            modelEndpoint: modelEndpoint, 
            nextToken: nextToken
        )
        return try await self.getExternalModels(input, logger: logger)
    }

    /// Gets the encryption key if a KMS key has been specified to be used to encrypt content in Amazon Fraud Detector.
    @Sendable
    @inlinable
    public func getKMSEncryptionKey(logger: Logger = AWSClient.loggingDisabled) async throws -> GetKMSEncryptionKeyResult {
        try await self.client.execute(
            operation: "GetKMSEncryptionKey", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            logger: logger
        )
    }

    /// Gets all labels or a specific label if name is provided. This is a paginated API. If you provide a null maxResults, this action retrieves a maximum of 50 records per page. If you provide a maxResults, the value must be between 10 and 50. To get the next page results, provide the pagination token from the GetGetLabelsResponse as part of your request. A null pagination token fetches the records from the beginning.
    @Sendable
    @inlinable
    public func getLabels(_ input: GetLabelsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetLabelsResult {
        try await self.client.execute(
            operation: "GetLabels", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets all labels or a specific label if name is provided. This is a paginated API. If you provide a null maxResults, this action retrieves a maximum of 50 records per page. If you provide a maxResults, the value must be between 10 and 50. To get the next page results, provide the pagination token from the GetGetLabelsResponse as part of your request. A null pagination token fetches the records from the beginning.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of objects to return for the request.
    ///   - name: The name of the label or labels to get.
    ///   - nextToken: The next token for the subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getLabels(
        maxResults: Int? = nil,
        name: String? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetLabelsResult {
        let input = GetLabelsRequest(
            maxResults: maxResults, 
            name: name, 
            nextToken: nextToken
        )
        return try await self.getLabels(input, logger: logger)
    }

    ///  Gets all the elements in the specified list.
    @Sendable
    @inlinable
    public func getListElements(_ input: GetListElementsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetListElementsResult {
        try await self.client.execute(
            operation: "GetListElements", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Gets all the elements in the specified list.
    ///
    /// Parameters:
    ///   - maxResults:  The maximum number of objects to return for the request.
    ///   - name:  The name of the list.
    ///   - nextToken:  The next token for the subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getListElements(
        maxResults: Int? = nil,
        name: String,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetListElementsResult {
        let input = GetListElementsRequest(
            maxResults: maxResults, 
            name: name, 
            nextToken: nextToken
        )
        return try await self.getListElements(input, logger: logger)
    }

    ///  Gets the metadata of either all the lists under the account or the specified list.
    @Sendable
    @inlinable
    public func getListsMetadata(_ input: GetListsMetadataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetListsMetadataResult {
        try await self.client.execute(
            operation: "GetListsMetadata", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Gets the metadata of either all the lists under the account or the specified list.
    ///
    /// Parameters:
    ///   - maxResults:  The maximum number of objects to return for the request.
    ///   - name:  The name of the list.
    ///   - nextToken:  The next token for the subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getListsMetadata(
        maxResults: Int? = nil,
        name: String? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetListsMetadataResult {
        let input = GetListsMetadataRequest(
            maxResults: maxResults, 
            name: name, 
            nextToken: nextToken
        )
        return try await self.getListsMetadata(input, logger: logger)
    }

    /// Gets the details of the specified model version.
    @Sendable
    @inlinable
    public func getModelVersion(_ input: GetModelVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetModelVersionResult {
        try await self.client.execute(
            operation: "GetModelVersion", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the details of the specified model version.
    ///
    /// Parameters:
    ///   - modelId: The model ID.
    ///   - modelType: The model type.
    ///   - modelVersionNumber: The model version number.
    ///   - logger: Logger use during operation
    @inlinable
    public func getModelVersion(
        modelId: String,
        modelType: ModelTypeEnum,
        modelVersionNumber: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetModelVersionResult {
        let input = GetModelVersionRequest(
            modelId: modelId, 
            modelType: modelType, 
            modelVersionNumber: modelVersionNumber
        )
        return try await self.getModelVersion(input, logger: logger)
    }

    /// Gets one or more models. Gets all models for the Amazon Web Services account if no model type and no model id provided. Gets all models for the Amazon Web Services account and model type, if the model type is specified but model id is not provided. Gets a specific model if (model type, model id) tuple is specified.  This is a paginated API. If you provide a null maxResults, this action retrieves a maximum of 10 records per page. If you provide a maxResults, the value must be between 1 and 10. To get the next page results, provide the pagination token from the response as part of your request. A null pagination token fetches the records from the beginning.
    @Sendable
    @inlinable
    public func getModels(_ input: GetModelsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetModelsResult {
        try await self.client.execute(
            operation: "GetModels", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets one or more models. Gets all models for the Amazon Web Services account if no model type and no model id provided. Gets all models for the Amazon Web Services account and model type, if the model type is specified but model id is not provided. Gets a specific model if (model type, model id) tuple is specified.  This is a paginated API. If you provide a null maxResults, this action retrieves a maximum of 10 records per page. If you provide a maxResults, the value must be between 1 and 10. To get the next page results, provide the pagination token from the response as part of your request. A null pagination token fetches the records from the beginning.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of objects to return for the request.
    ///   - modelId: The model ID.
    ///   - modelType: The model type.
    ///   - nextToken: The next token for the subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getModels(
        maxResults: Int? = nil,
        modelId: String? = nil,
        modelType: ModelTypeEnum? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetModelsResult {
        let input = GetModelsRequest(
            maxResults: maxResults, 
            modelId: modelId, 
            modelType: modelType, 
            nextToken: nextToken
        )
        return try await self.getModels(input, logger: logger)
    }

    /// Gets one or more outcomes. This is a paginated API. If you provide a null maxResults, this actions retrieves a maximum of 100 records per page. If you provide a maxResults, the value must be between 50 and 100. To get the next page results, provide the pagination token from the GetOutcomesResult as part of your request. A null pagination token fetches the records from the beginning.
    @Sendable
    @inlinable
    public func getOutcomes(_ input: GetOutcomesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetOutcomesResult {
        try await self.client.execute(
            operation: "GetOutcomes", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets one or more outcomes. This is a paginated API. If you provide a null maxResults, this actions retrieves a maximum of 100 records per page. If you provide a maxResults, the value must be between 50 and 100. To get the next page results, provide the pagination token from the GetOutcomesResult as part of your request. A null pagination token fetches the records from the beginning.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of objects to return for the request.
    ///   - name: The name of the outcome or outcomes to get.
    ///   - nextToken: The next page token for the request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getOutcomes(
        maxResults: Int? = nil,
        name: String? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetOutcomesResult {
        let input = GetOutcomesRequest(
            maxResults: maxResults, 
            name: name, 
            nextToken: nextToken
        )
        return try await self.getOutcomes(input, logger: logger)
    }

    /// Get all rules for a detector (paginated) if ruleId and ruleVersion are not specified. Gets all rules for the detector and the ruleId if present (paginated). Gets a specific rule if both the ruleId and the ruleVersion are specified. This is a paginated API. Providing null maxResults results in retrieving maximum of 100 records per page. If you provide maxResults the value must be between 50 and 100. To get the next page result, a provide a pagination token from GetRulesResult as part of your request. Null pagination token fetches the records from the beginning.
    @Sendable
    @inlinable
    public func getRules(_ input: GetRulesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRulesResult {
        try await self.client.execute(
            operation: "GetRules", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Get all rules for a detector (paginated) if ruleId and ruleVersion are not specified. Gets all rules for the detector and the ruleId if present (paginated). Gets a specific rule if both the ruleId and the ruleVersion are specified. This is a paginated API. Providing null maxResults results in retrieving maximum of 100 records per page. If you provide maxResults the value must be between 50 and 100. To get the next page result, a provide a pagination token from GetRulesResult as part of your request. Null pagination token fetches the records from the beginning.
    ///
    /// Parameters:
    ///   - detectorId: The detector ID.
    ///   - maxResults: The maximum number of rules to return for the request.
    ///   - nextToken: The next page token.
    ///   - ruleId: The rule ID.
    ///   - ruleVersion: The rule version.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRules(
        detectorId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        ruleId: String? = nil,
        ruleVersion: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRulesResult {
        let input = GetRulesRequest(
            detectorId: detectorId, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            ruleId: ruleId, 
            ruleVersion: ruleVersion
        )
        return try await self.getRules(input, logger: logger)
    }

    /// Gets all of the variables or the specific variable. This is a paginated API. Providing null maxSizePerPage results in retrieving maximum of 100 records per page. If you provide maxSizePerPage the value must be between 50 and 100. To get the next page result, a provide a pagination token from GetVariablesResult as part of your request. Null pagination token fetches the records from the beginning.
    @Sendable
    @inlinable
    public func getVariables(_ input: GetVariablesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetVariablesResult {
        try await self.client.execute(
            operation: "GetVariables", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets all of the variables or the specific variable. This is a paginated API. Providing null maxSizePerPage results in retrieving maximum of 100 records per page. If you provide maxSizePerPage the value must be between 50 and 100. To get the next page result, a provide a pagination token from GetVariablesResult as part of your request. Null pagination token fetches the records from the beginning.
    ///
    /// Parameters:
    ///   - maxResults: The max size per page determined for the get variable request.
    ///   - name: The name of the variable.
    ///   - nextToken: The next page token of the get variable request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getVariables(
        maxResults: Int? = nil,
        name: String? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetVariablesResult {
        let input = GetVariablesRequest(
            maxResults: maxResults, 
            name: name, 
            nextToken: nextToken
        )
        return try await self.getVariables(input, logger: logger)
    }

    /// Gets a list of past predictions. The list can be filtered by detector ID, detector version ID, event ID, event type, or by specifying a time period.  If filter is not specified, the most recent prediction is returned. For example, the following filter lists all past predictions for xyz event type - {  "eventType":{ "value": "xyz" }”  }    This is a paginated API. If you provide a null maxResults, this action will retrieve a maximum of 10 records per page.  If you provide a maxResults, the value must be between 50 and 100. To get the next page results, provide  the nextToken from the response as part of your request. A null nextToken fetches the records from the beginning.
    @Sendable
    @inlinable
    public func listEventPredictions(_ input: ListEventPredictionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListEventPredictionsResult {
        try await self.client.execute(
            operation: "ListEventPredictions", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a list of past predictions. The list can be filtered by detector ID, detector version ID, event ID, event type, or by specifying a time period.  If filter is not specified, the most recent prediction is returned. For example, the following filter lists all past predictions for xyz event type - {  "eventType":{ "value": "xyz" }”  }    This is a paginated API. If you provide a null maxResults, this action will retrieve a maximum of 10 records per page.  If you provide a maxResults, the value must be between 50 and 100. To get the next page results, provide  the nextToken from the response as part of your request. A null nextToken fetches the records from the beginning.
    ///
    /// Parameters:
    ///   - detectorId: The detector ID.
    ///   - detectorVersionId: The detector version ID.
    ///   - eventId: The event ID.
    ///   - eventType: The event type associated with the detector.
    ///   - maxResults: The maximum number of predictions to return for the request.
    ///   - nextToken: Identifies the next page of results to return. Use the token to make the call again to retrieve the next page. Keep all other arguments unchanged. Each pagination token expires after 24 hours.
    ///   - predictionTimeRange: The time period for when the predictions were generated.
    ///   - logger: Logger use during operation
    @inlinable
    public func listEventPredictions(
        detectorId: FilterCondition? = nil,
        detectorVersionId: FilterCondition? = nil,
        eventId: FilterCondition? = nil,
        eventType: FilterCondition? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        predictionTimeRange: PredictionTimeRange? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListEventPredictionsResult {
        let input = ListEventPredictionsRequest(
            detectorId: detectorId, 
            detectorVersionId: detectorVersionId, 
            eventId: eventId, 
            eventType: eventType, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            predictionTimeRange: predictionTimeRange
        )
        return try await self.listEventPredictions(input, logger: logger)
    }

    /// Lists all tags associated with the resource. This is a paginated API. To get the next page results, provide the pagination token from the response as part of your request. A null pagination token fetches the records from the beginning.
    @Sendable
    @inlinable
    public func listTagsForResource(_ input: ListTagsForResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsForResourceResult {
        try await self.client.execute(
            operation: "ListTagsForResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all tags associated with the resource. This is a paginated API. To get the next page results, provide the pagination token from the response as part of your request. A null pagination token fetches the records from the beginning.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of objects to return for the request.
    ///   - nextToken: The next token from the previous results.
    ///   - resourceARN: The ARN that specifies the resource whose tags you want to list.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTagsForResource(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resourceARN: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsForResourceResult {
        let input = ListTagsForResourceRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            resourceARN: resourceARN
        )
        return try await self.listTagsForResource(input, logger: logger)
    }

    /// Creates or updates a detector.
    @Sendable
    @inlinable
    public func putDetector(_ input: PutDetectorRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutDetectorResult {
        try await self.client.execute(
            operation: "PutDetector", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates or updates a detector.
    ///
    /// Parameters:
    ///   - description: The description of the detector.
    ///   - detectorId: The detector ID.
    ///   - eventTypeName: The name of the event type.
    ///   - tags: A collection of key and value pairs.
    ///   - logger: Logger use during operation
    @inlinable
    public func putDetector(
        description: String? = nil,
        detectorId: String,
        eventTypeName: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutDetectorResult {
        let input = PutDetectorRequest(
            description: description, 
            detectorId: detectorId, 
            eventTypeName: eventTypeName, 
            tags: tags
        )
        return try await self.putDetector(input, logger: logger)
    }

    /// Creates or updates an entity type. An entity represents who is performing the event. As part of a fraud prediction, you pass the entity ID to indicate the specific entity who performed the event. An entity type classifies the entity. Example classifications include customer, merchant, or account.
    @Sendable
    @inlinable
    public func putEntityType(_ input: PutEntityTypeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutEntityTypeResult {
        try await self.client.execute(
            operation: "PutEntityType", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates or updates an entity type. An entity represents who is performing the event. As part of a fraud prediction, you pass the entity ID to indicate the specific entity who performed the event. An entity type classifies the entity. Example classifications include customer, merchant, or account.
    ///
    /// Parameters:
    ///   - description: The description.
    ///   - name: The name of the entity type.
    ///   - tags: A collection of key and value pairs.
    ///   - logger: Logger use during operation
    @inlinable
    public func putEntityType(
        description: String? = nil,
        name: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutEntityTypeResult {
        let input = PutEntityTypeRequest(
            description: description, 
            name: name, 
            tags: tags
        )
        return try await self.putEntityType(input, logger: logger)
    }

    /// Creates or updates an event type. An event is a business activity that is evaluated for fraud risk. With Amazon Fraud Detector, you generate fraud predictions for events. An event type defines the structure for an event sent to Amazon Fraud Detector. This includes the variables sent as part of the event, the entity performing the event (such as a customer), and the labels that classify the event. Example event types include online payment transactions, account registrations, and authentications.
    @Sendable
    @inlinable
    public func putEventType(_ input: PutEventTypeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutEventTypeResult {
        try await self.client.execute(
            operation: "PutEventType", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates or updates an event type. An event is a business activity that is evaluated for fraud risk. With Amazon Fraud Detector, you generate fraud predictions for events. An event type defines the structure for an event sent to Amazon Fraud Detector. This includes the variables sent as part of the event, the entity performing the event (such as a customer), and the labels that classify the event. Example event types include online payment transactions, account registrations, and authentications.
    ///
    /// Parameters:
    ///   - description: The description of the event type.
    ///   - entityTypes: The entity type for the event type. Example entity types: customer, merchant, account.
    ///   - eventIngestion: Specifies if ingestion is enabled or disabled.
    ///   - eventOrchestration: Enables or disables event orchestration. If enabled, you can send event predictions to select AWS services for downstream processing of the events.
    ///   - eventVariables: The event type variables.
    ///   - labels: The event type labels.
    ///   - name: The name.
    ///   - tags: A collection of key and value pairs.
    ///   - logger: Logger use during operation
    @inlinable
    public func putEventType(
        description: String? = nil,
        entityTypes: [String],
        eventIngestion: EventIngestion? = nil,
        eventOrchestration: EventOrchestration? = nil,
        eventVariables: [String],
        labels: [String]? = nil,
        name: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutEventTypeResult {
        let input = PutEventTypeRequest(
            description: description, 
            entityTypes: entityTypes, 
            eventIngestion: eventIngestion, 
            eventOrchestration: eventOrchestration, 
            eventVariables: eventVariables, 
            labels: labels, 
            name: name, 
            tags: tags
        )
        return try await self.putEventType(input, logger: logger)
    }

    /// Creates or updates an Amazon SageMaker model endpoint. You can also use this action to update the configuration of the model endpoint, including the IAM role and/or the mapped variables.
    @Sendable
    @inlinable
    public func putExternalModel(_ input: PutExternalModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutExternalModelResult {
        try await self.client.execute(
            operation: "PutExternalModel", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates or updates an Amazon SageMaker model endpoint. You can also use this action to update the configuration of the model endpoint, including the IAM role and/or the mapped variables.
    ///
    /// Parameters:
    ///   - inputConfiguration: The model endpoint input configuration.
    ///   - invokeModelEndpointRoleArn: The IAM role used to invoke the model endpoint.
    ///   - modelEndpoint: The model endpoints name.
    ///   - modelEndpointStatus: The model endpoint’s status in Amazon Fraud Detector.
    ///   - modelSource: The source of the model.
    ///   - outputConfiguration: The model endpoint output configuration.
    ///   - tags: A collection of key and value pairs.
    ///   - logger: Logger use during operation
    @inlinable
    public func putExternalModel(
        inputConfiguration: ModelInputConfiguration,
        invokeModelEndpointRoleArn: String,
        modelEndpoint: String,
        modelEndpointStatus: ModelEndpointStatus,
        modelSource: ModelSource,
        outputConfiguration: ModelOutputConfiguration,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutExternalModelResult {
        let input = PutExternalModelRequest(
            inputConfiguration: inputConfiguration, 
            invokeModelEndpointRoleArn: invokeModelEndpointRoleArn, 
            modelEndpoint: modelEndpoint, 
            modelEndpointStatus: modelEndpointStatus, 
            modelSource: modelSource, 
            outputConfiguration: outputConfiguration, 
            tags: tags
        )
        return try await self.putExternalModel(input, logger: logger)
    }

    /// Specifies the KMS key to be used to encrypt content in Amazon Fraud Detector.
    @Sendable
    @inlinable
    public func putKMSEncryptionKey(_ input: PutKMSEncryptionKeyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutKMSEncryptionKeyResult {
        try await self.client.execute(
            operation: "PutKMSEncryptionKey", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Specifies the KMS key to be used to encrypt content in Amazon Fraud Detector.
    ///
    /// Parameters:
    ///   - kmsEncryptionKeyArn: The KMS encryption key ARN. The KMS key must be single-Region key. Amazon Fraud Detector does not support multi-Region KMS key.
    ///   - logger: Logger use during operation
    @inlinable
    public func putKMSEncryptionKey(
        kmsEncryptionKeyArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutKMSEncryptionKeyResult {
        let input = PutKMSEncryptionKeyRequest(
            kmsEncryptionKeyArn: kmsEncryptionKeyArn
        )
        return try await self.putKMSEncryptionKey(input, logger: logger)
    }

    /// Creates or updates label. A label classifies an event as fraudulent or legitimate. Labels are associated with event types and used to train supervised machine learning models in Amazon Fraud Detector.
    @Sendable
    @inlinable
    public func putLabel(_ input: PutLabelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutLabelResult {
        try await self.client.execute(
            operation: "PutLabel", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates or updates label. A label classifies an event as fraudulent or legitimate. Labels are associated with event types and used to train supervised machine learning models in Amazon Fraud Detector.
    ///
    /// Parameters:
    ///   - description: The label description.
    ///   - name: The label name.
    ///   - tags: A collection of key and value pairs.
    ///   - logger: Logger use during operation
    @inlinable
    public func putLabel(
        description: String? = nil,
        name: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutLabelResult {
        let input = PutLabelRequest(
            description: description, 
            name: name, 
            tags: tags
        )
        return try await self.putLabel(input, logger: logger)
    }

    /// Creates or updates an outcome.
    @Sendable
    @inlinable
    public func putOutcome(_ input: PutOutcomeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutOutcomeResult {
        try await self.client.execute(
            operation: "PutOutcome", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates or updates an outcome.
    ///
    /// Parameters:
    ///   - description: The outcome description.
    ///   - name: The name of the outcome.
    ///   - tags: A collection of key and value pairs.
    ///   - logger: Logger use during operation
    @inlinable
    public func putOutcome(
        description: String? = nil,
        name: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutOutcomeResult {
        let input = PutOutcomeRequest(
            description: description, 
            name: name, 
            tags: tags
        )
        return try await self.putOutcome(input, logger: logger)
    }

    /// Stores events in Amazon Fraud Detector without generating fraud predictions for those events. For example, you can use SendEvent to upload a historical dataset, which you can then later use to train a model.
    @Sendable
    @inlinable
    public func sendEvent(_ input: SendEventRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> SendEventResult {
        try await self.client.execute(
            operation: "SendEvent", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stores events in Amazon Fraud Detector without generating fraud predictions for those events. For example, you can use SendEvent to upload a historical dataset, which you can then later use to train a model.
    ///
    /// Parameters:
    ///   - assignedLabel: The label to associate with the event. Required if specifying labelTimestamp.
    ///   - entities: An array of entities.
    ///   - eventId: The event ID to upload.
    ///   - eventTimestamp: The timestamp that defines when the event under evaluation occurred. The timestamp must be specified using ISO 8601 standard in UTC.
    ///   - eventTypeName: The event type name of the event.
    ///   - eventVariables: Names of the event type's variables you defined in Amazon Fraud Detector to represent data elements and their corresponding values for the event you are sending for evaluation.
    ///   - labelTimestamp: The timestamp associated with the label. Required if specifying assignedLabel.
    ///   - logger: Logger use during operation
    @inlinable
    public func sendEvent(
        assignedLabel: String? = nil,
        entities: [Entity],
        eventId: String,
        eventTimestamp: String,
        eventTypeName: String,
        eventVariables: [String: String],
        labelTimestamp: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> SendEventResult {
        let input = SendEventRequest(
            assignedLabel: assignedLabel, 
            entities: entities, 
            eventId: eventId, 
            eventTimestamp: eventTimestamp, 
            eventTypeName: eventTypeName, 
            eventVariables: eventVariables, 
            labelTimestamp: labelTimestamp
        )
        return try await self.sendEvent(input, logger: logger)
    }

    /// Assigns tags to a resource.
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TagResourceResult {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Assigns tags to a resource.
    ///
    /// Parameters:
    ///   - resourceARN: The resource ARN.
    ///   - tags: The tags to assign to the resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        resourceARN: String,
        tags: [Tag],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TagResourceResult {
        let input = TagResourceRequest(
            resourceARN: resourceARN, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// Removes tags from a resource.
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UntagResourceResult {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes tags from a resource.
    ///
    /// Parameters:
    ///   - resourceARN: The ARN of the resource from which to remove the tag.
    ///   - tagKeys: The resource ARN.
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        resourceARN: String,
        tagKeys: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UntagResourceResult {
        let input = UntagResourceRequest(
            resourceARN: resourceARN, 
            tagKeys: tagKeys
        )
        return try await self.untagResource(input, logger: logger)
    }

    ///  Updates a detector version. The detector version attributes that you can update include models, external model endpoints, rules, rule execution mode, and description. You can only update a DRAFT detector version.
    @Sendable
    @inlinable
    public func updateDetectorVersion(_ input: UpdateDetectorVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateDetectorVersionResult {
        try await self.client.execute(
            operation: "UpdateDetectorVersion", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Updates a detector version. The detector version attributes that you can update include models, external model endpoints, rules, rule execution mode, and description. You can only update a DRAFT detector version.
    ///
    /// Parameters:
    ///   - description: The detector version description.
    ///   - detectorId: The parent detector ID for the detector version you want to update.
    ///   - detectorVersionId: The detector version ID.
    ///   - externalModelEndpoints: The Amazon SageMaker model endpoints to include in the detector version.
    ///   - modelVersions: The model versions to include in the detector version.
    ///   - ruleExecutionMode: The rule execution mode to add to the detector. If you specify FIRST_MATCHED, Amazon Fraud Detector evaluates rules sequentially, first to last, stopping at the first matched rule. Amazon Fraud dectector then provides the outcomes for that single rule. If you specifiy ALL_MATCHED, Amazon Fraud Detector evaluates all rules and returns the outcomes for all matched rules. You can define and edit the rule mode at the detector version level, when it is in draft status. The default behavior is FIRST_MATCHED.
    ///   - rules: The rules to include in the detector version.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDetectorVersion(
        description: String? = nil,
        detectorId: String,
        detectorVersionId: String,
        externalModelEndpoints: [String],
        modelVersions: [ModelVersion]? = nil,
        ruleExecutionMode: RuleExecutionMode? = nil,
        rules: [Rule],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateDetectorVersionResult {
        let input = UpdateDetectorVersionRequest(
            description: description, 
            detectorId: detectorId, 
            detectorVersionId: detectorVersionId, 
            externalModelEndpoints: externalModelEndpoints, 
            modelVersions: modelVersions, 
            ruleExecutionMode: ruleExecutionMode, 
            rules: rules
        )
        return try await self.updateDetectorVersion(input, logger: logger)
    }

    /// Updates the detector version's description. You can update the metadata for any detector version (DRAFT, ACTIVE, or INACTIVE).
    @Sendable
    @inlinable
    public func updateDetectorVersionMetadata(_ input: UpdateDetectorVersionMetadataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateDetectorVersionMetadataResult {
        try await self.client.execute(
            operation: "UpdateDetectorVersionMetadata", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the detector version's description. You can update the metadata for any detector version (DRAFT, ACTIVE, or INACTIVE).
    ///
    /// Parameters:
    ///   - description: The description.
    ///   - detectorId: The detector ID.
    ///   - detectorVersionId: The detector version ID.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDetectorVersionMetadata(
        description: String,
        detectorId: String,
        detectorVersionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateDetectorVersionMetadataResult {
        let input = UpdateDetectorVersionMetadataRequest(
            description: description, 
            detectorId: detectorId, 
            detectorVersionId: detectorVersionId
        )
        return try await self.updateDetectorVersionMetadata(input, logger: logger)
    }

    /// Updates the detector version’s status. You can perform the following promotions or demotions using UpdateDetectorVersionStatus: DRAFT to ACTIVE, ACTIVE to INACTIVE, and INACTIVE to ACTIVE.
    @Sendable
    @inlinable
    public func updateDetectorVersionStatus(_ input: UpdateDetectorVersionStatusRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateDetectorVersionStatusResult {
        try await self.client.execute(
            operation: "UpdateDetectorVersionStatus", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the detector version’s status. You can perform the following promotions or demotions using UpdateDetectorVersionStatus: DRAFT to ACTIVE, ACTIVE to INACTIVE, and INACTIVE to ACTIVE.
    ///
    /// Parameters:
    ///   - detectorId: The detector ID.
    ///   - detectorVersionId: The detector version ID.
    ///   - status: The new status. The only supported values are ACTIVE and INACTIVE
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDetectorVersionStatus(
        detectorId: String,
        detectorVersionId: String,
        status: DetectorVersionStatus,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateDetectorVersionStatusResult {
        let input = UpdateDetectorVersionStatusRequest(
            detectorId: detectorId, 
            detectorVersionId: detectorVersionId, 
            status: status
        )
        return try await self.updateDetectorVersionStatus(input, logger: logger)
    }

    /// Updates the specified event with a new label.
    @Sendable
    @inlinable
    public func updateEventLabel(_ input: UpdateEventLabelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateEventLabelResult {
        try await self.client.execute(
            operation: "UpdateEventLabel", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the specified event with a new label.
    ///
    /// Parameters:
    ///   - assignedLabel: The new label to assign to the event.
    ///   - eventId: The ID of the event associated with the label to update.
    ///   - eventTypeName: The event type of the event associated with the label to update.
    ///   - labelTimestamp: The timestamp associated with the label. The timestamp must be specified using ISO 8601 standard in UTC.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateEventLabel(
        assignedLabel: String,
        eventId: String,
        eventTypeName: String,
        labelTimestamp: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateEventLabelResult {
        let input = UpdateEventLabelRequest(
            assignedLabel: assignedLabel, 
            eventId: eventId, 
            eventTypeName: eventTypeName, 
            labelTimestamp: labelTimestamp
        )
        return try await self.updateEventLabel(input, logger: logger)
    }

    ///  Updates a list.
    @Sendable
    @inlinable
    public func updateList(_ input: UpdateListRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateListResult {
        try await self.client.execute(
            operation: "UpdateList", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Updates a list.
    ///
    /// Parameters:
    ///   - description:  The new description.
    ///   - elements:  One or more list elements to add or replace. If you are providing the elements, make sure to specify the updateMode to use.  If you are deleting all elements from the list, use REPLACE for the updateMode and provide an empty list (0 elements).
    ///   - name:  The name of the list to update.
    ///   - updateMode:  The update mode (type).    Use APPEND if you are adding elements to the list.   Use REPLACE if you replacing existing elements in the list.   Use REMOVE if you are removing elements from the list.
    ///   - variableType:  The variable type you want to assign to the list.   You cannot update a variable type of a list that already has a variable type assigned to it. You can assign a variable type to a list only if the list does not already have a variable type.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateList(
        description: String? = nil,
        elements: [String]? = nil,
        name: String,
        updateMode: ListUpdateMode? = nil,
        variableType: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateListResult {
        let input = UpdateListRequest(
            description: description, 
            elements: elements, 
            name: name, 
            updateMode: updateMode, 
            variableType: variableType
        )
        return try await self.updateList(input, logger: logger)
    }

    /// Updates model description.
    @Sendable
    @inlinable
    public func updateModel(_ input: UpdateModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateModelResult {
        try await self.client.execute(
            operation: "UpdateModel", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates model description.
    ///
    /// Parameters:
    ///   - description: The new model description.
    ///   - modelId: The model ID.
    ///   - modelType: The model type.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateModel(
        description: String? = nil,
        modelId: String,
        modelType: ModelTypeEnum,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateModelResult {
        let input = UpdateModelRequest(
            description: description, 
            modelId: modelId, 
            modelType: modelType
        )
        return try await self.updateModel(input, logger: logger)
    }

    /// Updates a model version. Updating a model version retrains an existing model version using updated training data and produces a new minor version of the model. You can update the training data set location and data access role attributes using this action. This action creates and trains a new minor version of the model, for example version 1.01, 1.02, 1.03.
    @Sendable
    @inlinable
    public func updateModelVersion(_ input: UpdateModelVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateModelVersionResult {
        try await self.client.execute(
            operation: "UpdateModelVersion", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates a model version. Updating a model version retrains an existing model version using updated training data and produces a new minor version of the model. You can update the training data set location and data access role attributes using this action. This action creates and trains a new minor version of the model, for example version 1.01, 1.02, 1.03.
    ///
    /// Parameters:
    ///   - externalEventsDetail: The details of the external events data used for training the model version. Required if trainingDataSource is EXTERNAL_EVENTS.
    ///   - ingestedEventsDetail: The details of the ingested event used for training the model version. Required if your trainingDataSource is INGESTED_EVENTS.
    ///   - majorVersionNumber: The major version number.
    ///   - modelId: The model ID.
    ///   - modelType: The model type.
    ///   - tags: A collection of key and value pairs.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateModelVersion(
        externalEventsDetail: ExternalEventsDetail? = nil,
        ingestedEventsDetail: IngestedEventsDetail? = nil,
        majorVersionNumber: String,
        modelId: String,
        modelType: ModelTypeEnum,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateModelVersionResult {
        let input = UpdateModelVersionRequest(
            externalEventsDetail: externalEventsDetail, 
            ingestedEventsDetail: ingestedEventsDetail, 
            majorVersionNumber: majorVersionNumber, 
            modelId: modelId, 
            modelType: modelType, 
            tags: tags
        )
        return try await self.updateModelVersion(input, logger: logger)
    }

    /// Updates the status of a model version. You can perform the following status updates:   Change the TRAINING_IN_PROGRESS status to TRAINING_CANCELLED.   Change the TRAINING_COMPLETE status to ACTIVE.   Change ACTIVE to INACTIVE.
    @Sendable
    @inlinable
    public func updateModelVersionStatus(_ input: UpdateModelVersionStatusRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateModelVersionStatusResult {
        try await self.client.execute(
            operation: "UpdateModelVersionStatus", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the status of a model version. You can perform the following status updates:   Change the TRAINING_IN_PROGRESS status to TRAINING_CANCELLED.   Change the TRAINING_COMPLETE status to ACTIVE.   Change ACTIVE to INACTIVE.
    ///
    /// Parameters:
    ///   - modelId: The model ID of the model version to update.
    ///   - modelType: The model type.
    ///   - modelVersionNumber: The model version number.
    ///   - status: The model version status.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateModelVersionStatus(
        modelId: String,
        modelType: ModelTypeEnum,
        modelVersionNumber: String,
        status: ModelVersionStatus,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateModelVersionStatusResult {
        let input = UpdateModelVersionStatusRequest(
            modelId: modelId, 
            modelType: modelType, 
            modelVersionNumber: modelVersionNumber, 
            status: status
        )
        return try await self.updateModelVersionStatus(input, logger: logger)
    }

    /// Updates a rule's metadata. The description attribute can be updated.
    @Sendable
    @inlinable
    public func updateRuleMetadata(_ input: UpdateRuleMetadataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateRuleMetadataResult {
        try await self.client.execute(
            operation: "UpdateRuleMetadata", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates a rule's metadata. The description attribute can be updated.
    ///
    /// Parameters:
    ///   - description: The rule description.
    ///   - rule: The rule to update.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateRuleMetadata(
        description: String,
        rule: Rule,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateRuleMetadataResult {
        let input = UpdateRuleMetadataRequest(
            description: description, 
            rule: rule
        )
        return try await self.updateRuleMetadata(input, logger: logger)
    }

    /// Updates a rule version resulting in a new rule version. Updates a rule version resulting in a new rule version (version 1, 2, 3 ...).
    @Sendable
    @inlinable
    public func updateRuleVersion(_ input: UpdateRuleVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateRuleVersionResult {
        try await self.client.execute(
            operation: "UpdateRuleVersion", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates a rule version resulting in a new rule version. Updates a rule version resulting in a new rule version (version 1, 2, 3 ...).
    ///
    /// Parameters:
    ///   - description: The description.
    ///   - expression: The rule expression.
    ///   - language: The language.
    ///   - outcomes: The outcomes.
    ///   - rule: The rule to update.
    ///   - tags: The tags to assign to the rule version.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateRuleVersion(
        description: String? = nil,
        expression: String,
        language: Language,
        outcomes: [String],
        rule: Rule,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateRuleVersionResult {
        let input = UpdateRuleVersionRequest(
            description: description, 
            expression: expression, 
            language: language, 
            outcomes: outcomes, 
            rule: rule, 
            tags: tags
        )
        return try await self.updateRuleVersion(input, logger: logger)
    }

    /// Updates a variable.
    @Sendable
    @inlinable
    public func updateVariable(_ input: UpdateVariableRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateVariableResult {
        try await self.client.execute(
            operation: "UpdateVariable", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates a variable.
    ///
    /// Parameters:
    ///   - defaultValue: The new default value of the variable.
    ///   - description: The new description.
    ///   - name: The name of the variable.
    ///   - variableType: The variable type. For more information see Variable types.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateVariable(
        defaultValue: String? = nil,
        description: String? = nil,
        name: String,
        variableType: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateVariableResult {
        let input = UpdateVariableRequest(
            defaultValue: defaultValue, 
            description: description, 
            name: name, 
            variableType: variableType
        )
        return try await self.updateVariable(input, logger: logger)
    }
}

extension FraudDetector {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: FraudDetector, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension FraudDetector {
    /// Return PaginatorSequence for operation ``describeModelVersions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeModelVersionsPaginator(
        _ input: DescribeModelVersionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeModelVersionsRequest, DescribeModelVersionsResult> {
        return .init(
            input: input,
            command: self.describeModelVersions,
            inputKey: \DescribeModelVersionsRequest.nextToken,
            outputKey: \DescribeModelVersionsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeModelVersions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return.
    ///   - modelId: The model ID.
    ///   - modelType: The model type.
    ///   - modelVersionNumber: The model version number.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeModelVersionsPaginator(
        maxResults: Int? = nil,
        modelId: String? = nil,
        modelType: ModelTypeEnum? = nil,
        modelVersionNumber: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeModelVersionsRequest, DescribeModelVersionsResult> {
        let input = DescribeModelVersionsRequest(
            maxResults: maxResults, 
            modelId: modelId, 
            modelType: modelType, 
            modelVersionNumber: modelVersionNumber
        )
        return self.describeModelVersionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getBatchImportJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getBatchImportJobsPaginator(
        _ input: GetBatchImportJobsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetBatchImportJobsRequest, GetBatchImportJobsResult> {
        return .init(
            input: input,
            command: self.getBatchImportJobs,
            inputKey: \GetBatchImportJobsRequest.nextToken,
            outputKey: \GetBatchImportJobsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getBatchImportJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - jobId: The ID of the batch import job to get.
    ///   - maxResults: The maximum number of objects to return for request.
    ///   - logger: Logger used for logging
    @inlinable
    public func getBatchImportJobsPaginator(
        jobId: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetBatchImportJobsRequest, GetBatchImportJobsResult> {
        let input = GetBatchImportJobsRequest(
            jobId: jobId, 
            maxResults: maxResults
        )
        return self.getBatchImportJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getBatchPredictionJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getBatchPredictionJobsPaginator(
        _ input: GetBatchPredictionJobsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetBatchPredictionJobsRequest, GetBatchPredictionJobsResult> {
        return .init(
            input: input,
            command: self.getBatchPredictionJobs,
            inputKey: \GetBatchPredictionJobsRequest.nextToken,
            outputKey: \GetBatchPredictionJobsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getBatchPredictionJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - jobId: The batch prediction job for which to get the details.
    ///   - maxResults: The maximum number of objects to return for the request.
    ///   - logger: Logger used for logging
    @inlinable
    public func getBatchPredictionJobsPaginator(
        jobId: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetBatchPredictionJobsRequest, GetBatchPredictionJobsResult> {
        let input = GetBatchPredictionJobsRequest(
            jobId: jobId, 
            maxResults: maxResults
        )
        return self.getBatchPredictionJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getDetectors(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getDetectorsPaginator(
        _ input: GetDetectorsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetDetectorsRequest, GetDetectorsResult> {
        return .init(
            input: input,
            command: self.getDetectors,
            inputKey: \GetDetectorsRequest.nextToken,
            outputKey: \GetDetectorsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getDetectors(_:logger:)``.
    ///
    /// - Parameters:
    ///   - detectorId: The detector ID.
    ///   - maxResults: The maximum number of objects to return for the request.
    ///   - logger: Logger used for logging
    @inlinable
    public func getDetectorsPaginator(
        detectorId: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetDetectorsRequest, GetDetectorsResult> {
        let input = GetDetectorsRequest(
            detectorId: detectorId, 
            maxResults: maxResults
        )
        return self.getDetectorsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getEntityTypes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getEntityTypesPaginator(
        _ input: GetEntityTypesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetEntityTypesRequest, GetEntityTypesResult> {
        return .init(
            input: input,
            command: self.getEntityTypes,
            inputKey: \GetEntityTypesRequest.nextToken,
            outputKey: \GetEntityTypesResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getEntityTypes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of objects to return for the request.
    ///   - name: The name.
    ///   - logger: Logger used for logging
    @inlinable
    public func getEntityTypesPaginator(
        maxResults: Int? = nil,
        name: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetEntityTypesRequest, GetEntityTypesResult> {
        let input = GetEntityTypesRequest(
            maxResults: maxResults, 
            name: name
        )
        return self.getEntityTypesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getEventTypes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getEventTypesPaginator(
        _ input: GetEventTypesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetEventTypesRequest, GetEventTypesResult> {
        return .init(
            input: input,
            command: self.getEventTypes,
            inputKey: \GetEventTypesRequest.nextToken,
            outputKey: \GetEventTypesResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getEventTypes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of objects to return for the request.
    ///   - name: The name.
    ///   - logger: Logger used for logging
    @inlinable
    public func getEventTypesPaginator(
        maxResults: Int? = nil,
        name: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetEventTypesRequest, GetEventTypesResult> {
        let input = GetEventTypesRequest(
            maxResults: maxResults, 
            name: name
        )
        return self.getEventTypesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getExternalModels(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getExternalModelsPaginator(
        _ input: GetExternalModelsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetExternalModelsRequest, GetExternalModelsResult> {
        return .init(
            input: input,
            command: self.getExternalModels,
            inputKey: \GetExternalModelsRequest.nextToken,
            outputKey: \GetExternalModelsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getExternalModels(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of objects to return for the request.
    ///   - modelEndpoint: The Amazon SageMaker model endpoint.
    ///   - logger: Logger used for logging
    @inlinable
    public func getExternalModelsPaginator(
        maxResults: Int? = nil,
        modelEndpoint: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetExternalModelsRequest, GetExternalModelsResult> {
        let input = GetExternalModelsRequest(
            maxResults: maxResults, 
            modelEndpoint: modelEndpoint
        )
        return self.getExternalModelsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getLabels(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getLabelsPaginator(
        _ input: GetLabelsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetLabelsRequest, GetLabelsResult> {
        return .init(
            input: input,
            command: self.getLabels,
            inputKey: \GetLabelsRequest.nextToken,
            outputKey: \GetLabelsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getLabels(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of objects to return for the request.
    ///   - name: The name of the label or labels to get.
    ///   - logger: Logger used for logging
    @inlinable
    public func getLabelsPaginator(
        maxResults: Int? = nil,
        name: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetLabelsRequest, GetLabelsResult> {
        let input = GetLabelsRequest(
            maxResults: maxResults, 
            name: name
        )
        return self.getLabelsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getListElements(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getListElementsPaginator(
        _ input: GetListElementsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetListElementsRequest, GetListElementsResult> {
        return .init(
            input: input,
            command: self.getListElements,
            inputKey: \GetListElementsRequest.nextToken,
            outputKey: \GetListElementsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getListElements(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults:  The maximum number of objects to return for the request.
    ///   - name:  The name of the list.
    ///   - logger: Logger used for logging
    @inlinable
    public func getListElementsPaginator(
        maxResults: Int? = nil,
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetListElementsRequest, GetListElementsResult> {
        let input = GetListElementsRequest(
            maxResults: maxResults, 
            name: name
        )
        return self.getListElementsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getListsMetadata(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getListsMetadataPaginator(
        _ input: GetListsMetadataRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetListsMetadataRequest, GetListsMetadataResult> {
        return .init(
            input: input,
            command: self.getListsMetadata,
            inputKey: \GetListsMetadataRequest.nextToken,
            outputKey: \GetListsMetadataResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getListsMetadata(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults:  The maximum number of objects to return for the request.
    ///   - name:  The name of the list.
    ///   - logger: Logger used for logging
    @inlinable
    public func getListsMetadataPaginator(
        maxResults: Int? = nil,
        name: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetListsMetadataRequest, GetListsMetadataResult> {
        let input = GetListsMetadataRequest(
            maxResults: maxResults, 
            name: name
        )
        return self.getListsMetadataPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getModels(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getModelsPaginator(
        _ input: GetModelsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetModelsRequest, GetModelsResult> {
        return .init(
            input: input,
            command: self.getModels,
            inputKey: \GetModelsRequest.nextToken,
            outputKey: \GetModelsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getModels(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of objects to return for the request.
    ///   - modelId: The model ID.
    ///   - modelType: The model type.
    ///   - logger: Logger used for logging
    @inlinable
    public func getModelsPaginator(
        maxResults: Int? = nil,
        modelId: String? = nil,
        modelType: ModelTypeEnum? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetModelsRequest, GetModelsResult> {
        let input = GetModelsRequest(
            maxResults: maxResults, 
            modelId: modelId, 
            modelType: modelType
        )
        return self.getModelsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getOutcomes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getOutcomesPaginator(
        _ input: GetOutcomesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetOutcomesRequest, GetOutcomesResult> {
        return .init(
            input: input,
            command: self.getOutcomes,
            inputKey: \GetOutcomesRequest.nextToken,
            outputKey: \GetOutcomesResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getOutcomes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of objects to return for the request.
    ///   - name: The name of the outcome or outcomes to get.
    ///   - logger: Logger used for logging
    @inlinable
    public func getOutcomesPaginator(
        maxResults: Int? = nil,
        name: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetOutcomesRequest, GetOutcomesResult> {
        let input = GetOutcomesRequest(
            maxResults: maxResults, 
            name: name
        )
        return self.getOutcomesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getRules(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getRulesPaginator(
        _ input: GetRulesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetRulesRequest, GetRulesResult> {
        return .init(
            input: input,
            command: self.getRules,
            inputKey: \GetRulesRequest.nextToken,
            outputKey: \GetRulesResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getRules(_:logger:)``.
    ///
    /// - Parameters:
    ///   - detectorId: The detector ID.
    ///   - maxResults: The maximum number of rules to return for the request.
    ///   - ruleId: The rule ID.
    ///   - ruleVersion: The rule version.
    ///   - logger: Logger used for logging
    @inlinable
    public func getRulesPaginator(
        detectorId: String,
        maxResults: Int? = nil,
        ruleId: String? = nil,
        ruleVersion: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetRulesRequest, GetRulesResult> {
        let input = GetRulesRequest(
            detectorId: detectorId, 
            maxResults: maxResults, 
            ruleId: ruleId, 
            ruleVersion: ruleVersion
        )
        return self.getRulesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getVariables(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getVariablesPaginator(
        _ input: GetVariablesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetVariablesRequest, GetVariablesResult> {
        return .init(
            input: input,
            command: self.getVariables,
            inputKey: \GetVariablesRequest.nextToken,
            outputKey: \GetVariablesResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getVariables(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The max size per page determined for the get variable request.
    ///   - name: The name of the variable.
    ///   - logger: Logger used for logging
    @inlinable
    public func getVariablesPaginator(
        maxResults: Int? = nil,
        name: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetVariablesRequest, GetVariablesResult> {
        let input = GetVariablesRequest(
            maxResults: maxResults, 
            name: name
        )
        return self.getVariablesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listEventPredictions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listEventPredictionsPaginator(
        _ input: ListEventPredictionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListEventPredictionsRequest, ListEventPredictionsResult> {
        return .init(
            input: input,
            command: self.listEventPredictions,
            inputKey: \ListEventPredictionsRequest.nextToken,
            outputKey: \ListEventPredictionsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listEventPredictions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - detectorId: The detector ID.
    ///   - detectorVersionId: The detector version ID.
    ///   - eventId: The event ID.
    ///   - eventType: The event type associated with the detector.
    ///   - maxResults: The maximum number of predictions to return for the request.
    ///   - predictionTimeRange: The time period for when the predictions were generated.
    ///   - logger: Logger used for logging
    @inlinable
    public func listEventPredictionsPaginator(
        detectorId: FilterCondition? = nil,
        detectorVersionId: FilterCondition? = nil,
        eventId: FilterCondition? = nil,
        eventType: FilterCondition? = nil,
        maxResults: Int? = nil,
        predictionTimeRange: PredictionTimeRange? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListEventPredictionsRequest, ListEventPredictionsResult> {
        let input = ListEventPredictionsRequest(
            detectorId: detectorId, 
            detectorVersionId: detectorVersionId, 
            eventId: eventId, 
            eventType: eventType, 
            maxResults: maxResults, 
            predictionTimeRange: predictionTimeRange
        )
        return self.listEventPredictionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listTagsForResource(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listTagsForResourcePaginator(
        _ input: ListTagsForResourceRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListTagsForResourceRequest, ListTagsForResourceResult> {
        return .init(
            input: input,
            command: self.listTagsForResource,
            inputKey: \ListTagsForResourceRequest.nextToken,
            outputKey: \ListTagsForResourceResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listTagsForResource(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of objects to return for the request.
    ///   - resourceARN: The ARN that specifies the resource whose tags you want to list.
    ///   - logger: Logger used for logging
    @inlinable
    public func listTagsForResourcePaginator(
        maxResults: Int? = nil,
        resourceARN: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListTagsForResourceRequest, ListTagsForResourceResult> {
        let input = ListTagsForResourceRequest(
            maxResults: maxResults, 
            resourceARN: resourceARN
        )
        return self.listTagsForResourcePaginator(input, logger: logger)
    }
}

extension FraudDetector.DescribeModelVersionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FraudDetector.DescribeModelVersionsRequest {
        return .init(
            maxResults: self.maxResults,
            modelId: self.modelId,
            modelType: self.modelType,
            modelVersionNumber: self.modelVersionNumber,
            nextToken: token
        )
    }
}

extension FraudDetector.GetBatchImportJobsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FraudDetector.GetBatchImportJobsRequest {
        return .init(
            jobId: self.jobId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension FraudDetector.GetBatchPredictionJobsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FraudDetector.GetBatchPredictionJobsRequest {
        return .init(
            jobId: self.jobId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension FraudDetector.GetDetectorsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FraudDetector.GetDetectorsRequest {
        return .init(
            detectorId: self.detectorId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension FraudDetector.GetEntityTypesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FraudDetector.GetEntityTypesRequest {
        return .init(
            maxResults: self.maxResults,
            name: self.name,
            nextToken: token
        )
    }
}

extension FraudDetector.GetEventTypesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FraudDetector.GetEventTypesRequest {
        return .init(
            maxResults: self.maxResults,
            name: self.name,
            nextToken: token
        )
    }
}

extension FraudDetector.GetExternalModelsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FraudDetector.GetExternalModelsRequest {
        return .init(
            maxResults: self.maxResults,
            modelEndpoint: self.modelEndpoint,
            nextToken: token
        )
    }
}

extension FraudDetector.GetLabelsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FraudDetector.GetLabelsRequest {
        return .init(
            maxResults: self.maxResults,
            name: self.name,
            nextToken: token
        )
    }
}

extension FraudDetector.GetListElementsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FraudDetector.GetListElementsRequest {
        return .init(
            maxResults: self.maxResults,
            name: self.name,
            nextToken: token
        )
    }
}

extension FraudDetector.GetListsMetadataRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FraudDetector.GetListsMetadataRequest {
        return .init(
            maxResults: self.maxResults,
            name: self.name,
            nextToken: token
        )
    }
}

extension FraudDetector.GetModelsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FraudDetector.GetModelsRequest {
        return .init(
            maxResults: self.maxResults,
            modelId: self.modelId,
            modelType: self.modelType,
            nextToken: token
        )
    }
}

extension FraudDetector.GetOutcomesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FraudDetector.GetOutcomesRequest {
        return .init(
            maxResults: self.maxResults,
            name: self.name,
            nextToken: token
        )
    }
}

extension FraudDetector.GetRulesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FraudDetector.GetRulesRequest {
        return .init(
            detectorId: self.detectorId,
            maxResults: self.maxResults,
            nextToken: token,
            ruleId: self.ruleId,
            ruleVersion: self.ruleVersion
        )
    }
}

extension FraudDetector.GetVariablesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FraudDetector.GetVariablesRequest {
        return .init(
            maxResults: self.maxResults,
            name: self.name,
            nextToken: token
        )
    }
}

extension FraudDetector.ListEventPredictionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FraudDetector.ListEventPredictionsRequest {
        return .init(
            detectorId: self.detectorId,
            detectorVersionId: self.detectorVersionId,
            eventId: self.eventId,
            eventType: self.eventType,
            maxResults: self.maxResults,
            nextToken: token,
            predictionTimeRange: self.predictionTimeRange
        )
    }
}

extension FraudDetector.ListTagsForResourceRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> FraudDetector.ListTagsForResourceRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            resourceARN: self.resourceARN
        )
    }
}
